#ifndef MINI_PARSER_VALS_H
#define MINI_PARSER_VALS_H

#pragma once

#include "../main/stdafx.h"
#include <boost/variant.hpp>
#include "../main/Builtin.h"

namespace MiniBasic
{
    struct Variable;
    class Environment;
    class Lexecutioner;

    typedef boost::variant<mbint, std::string, Variable*> var_type;

    // return values for the parser leaves packaged together
    // because we can only have one return type for them all
    struct Vals
    {
        bool flag;
        var_type var;
        Builtin::Function* function;
    };

    struct ParseParams
    {
        Environment* env;
        // needed to call yylex
        Lexecutioner* lexer;
    };
}

typedef boost::variant<mbint, std::string> value_type;

#endif
